"""
力扣 1056
"""
"""
给定一个数字 N，当它满足以下条件的时候返回 true：

原数字旋转 180° 以后可以得到新的数字。

如 0, 1, 6, 8, 9 旋转 180° 以后，得到了新的数字 0, 1, 9, 8, 6 。

2, 3, 4, 5, 7 旋转 180° 后，得到的不是数字。

易混淆数 (confusing number) 在旋转180°以后，可以得到和原来不同的数，且新数字的每一位都是有效的。
"""
"""
示例 1：
6 -> 9

输入：6
输出：true
解释： 
把 6 旋转 180° 以后得到 9，9 是有效数字且 9 != 6 。


示例 2：
89 -> 68

输入：89
输出：true
解释: 
把 89 旋转 180° 以后得到 68，68 是有效数字且 89!=68 。


示例 3：
11 -> 11

输入：11
输出：false
解释：
把 11 旋转 180° 以后得到 11，11 是有效数字但是值保持不变，所以 11 不是易混淆数字。


示例 4：
25 -> 

输入：25
输出：false
解释：
把 25 旋转 180° 以后得到的不是数字。
"""


def confusingNumber(n: int) -> bool:
    dic = {'0': '0', '1': '1', '8': '8', '6': '9', '9': '6'}
    s = str(n)
    rev_s = ""
    for c in s:
        if c not in dic.keys():
            return False
        rev_s = dic[c] + rev_s
    return rev_s != s


def confusingNumber_v2(n: int) -> bool:
    refn = n
    if n == 0:
        return False
    ref = [2, 3, 4, 5, 7]
    res = 0
    while n > 0:
        res = res * 10
        a = n % 10
        if a in ref:
            return False
        if a == 6:
            res += 9
        elif a == 9:
            res += 6
        else:
            res += a
        n //= 10
    return res != refn


if __name__ == '__main__':
    print(confusingNumber(916))
